package com.guomao.cloud.controller;


import com.guomao.cloud.domain.CommonResult;
import com.guomao.cloud.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

/**
 * 远程用户控制器
 * 提供用户相关的远程调用接口
 */
@RestController
@RequestMapping("/user")
public class RemoteUserController {
    // 自动注入RestTemplate模板，用于远程HTTP调用
    @Autowired
    private RestTemplate restTemplate;
    // 从配置文件中获取用户服务的URL地址
    @Value("${service-url.consul-user-service}")
    private String userServiceUrl;

//    http://localhost:8206/user/1
//    http://nacos-user-service/user/1
//
    /**
     * 根据用户ID获取用户信息
     *
     * @param id 用户ID
     * @return 返回包含用户信息的CommonResult对象
     */
    @GetMapping("/{id}")
    public CommonResult getUser(@PathVariable Long id) {
        return restTemplate.getForObject(userServiceUrl + "/user/{1}", CommonResult.class, id);
    }

    /**
     * 根据用户名获取用户信息
     *
     * @param username 用户名
     * @return 返回包含用户信息的CommonResult对象
     */
    @GetMapping("/getByUsername")
    public CommonResult getByUsername(@RequestParam String username) {
        return restTemplate.getForObject(userServiceUrl + "/user/getByUsername?username={1}", CommonResult.class, username);
    }

    /**
     * 根据用户名获取用户实体信息
     *
     * @param username 用户名
     * @return 返回包含用户信息的CommonResult对象，如果请求失败则返回错误信息
     */
    @GetMapping("/getEntityByUsername")
    public CommonResult getEntityByUsername(@RequestParam String username) {
        // 使用getForEntity获取完整响应信息，包括状态码
        ResponseEntity<CommonResult> entity = restTemplate.getForEntity(userServiceUrl + "/user/getByUsername?username={1}", CommonResult.class, username);
        // 判断响应状态码是否为2xx（成功）
        if (entity.getStatusCode().is2xxSuccessful()) {
            return entity.getBody();
        } else {
            return new CommonResult("操作失败", 500);
        }
    }

    /**
     * 创建用户
     *
     * @param user 用户对象
     * @return 返回操作结果的CommonResult对象
     */
    @PostMapping("/create")
    public CommonResult create(@RequestBody User user) {
        return restTemplate.postForObject(userServiceUrl + "/user/create", user, CommonResult.class);
    }

    /**
     * 更新用户信息
     *
     * @param user 用户对象
     * @return 返回操作结果的CommonResult对象
     */
    @PostMapping("/update")
    public CommonResult update(@RequestBody User user) {
        return restTemplate.postForObject(userServiceUrl + "/user/update", user, CommonResult.class);
    }

    /**
     * 删除用户
     *
     * @param id 用户ID
     * @return 返回操作结果的CommonResult对象
     */
    @PostMapping("/delete/{id}")
    public CommonResult delete(@PathVariable Long id) {
        return restTemplate.postForObject(userServiceUrl + "/user/delete/{1}", null, CommonResult.class, id);
    }
}
